/**
 * @Description: 跳转拦截 主要处理页面登录跳转 以及防止多次跳转登录问题
 * @Author: 雨
 * @Date: 2024-06-19 17:06:57
 * @LastEditor: 雨
 * @LastEditTime: 2025-04-01 09:17:43
 */
/* 
	需要在pages.json里面加上这个配置
	"meta": {
		"needLogin": true
	},
	并且在main.js中引入
	import '@/intercept.js';
 */

import pagesJson from '@/pages.json';
import store from '@/store/index.js';
// 需要登录的页面
const needLoginArr = pagesJson.pages.filter(item => item.meta?.needLogin);
// 登录页面
const loginUrl = '/pages/login/login';
// ！！！！！ 登录页面后面路径 这里需要写后缀路径 防止 login下面还有其他页面路径 导致无法跳转
const interceptUrl = '/login/login'
uni.addInterceptor('navigateTo', {
	invoke(args) {
		let pages = getCurrentPages();
		let newPages = pages.map(item => item.route);
		// 当前页面路径
		let nowUrl = args.url.split('?')[0];
		// 最后一个页面
		let lastPage = newPages.length && newPages[newPages.length - 1];
		// 页面是否需要登录
		let nowRouter = needLoginArr.find(val => `/${val.path}` == nowUrl);
		let token = uni.getStorageSync('token');
		if (nowRouter && !token) {
			uni.navigateTo({
				url: loginUrl
			})
			return false;
		};
		// 防止重复跳转登录页 
		if (lastPage && nowUrl.includes(interceptUrl) && lastPage.includes(interceptUrl)) {
			return false;
		}
		return true;
	}
});
uni.addInterceptor('switchTab', {
	invoke(args) {
		// #ifdef H5
		if (args.from && args.from == 'tabBar') {
			store.dispatch('isH5')
		}
		// #endif
		if (args.from && args.from == 'tabBar' && args.url == '/pages/video/video') {
			store.commit('setVideoId', "")
			store.commit('setVideoType', "4")
		}
		if (args.from && args.from == 'tabBar' && args.url == '/pages/vip/vip') {
			if (store.state.user.level == 0) { //非会员
				uni.showModal({
					title: '提示',
					content: '该区仅限vip用户',
					confirmText: '开通VIP',
					confirmColor: '#ff864f',
					success: function(res) {
						if (res.confirm) {
							console.log('用户点击确定');
							uni.navigateTo({
								url: "/pages/my/vipCenter"
							})
						} else if (res.cancel) {
							console.log('用户点击取消');
						}
					}
				});
				return false
			} else {
				return true
			}
		}
		return true
	}
})